'''
Luke Valenta
lukev@seas.upenn.edu
Sept. 2014
'''

'''
The implementation of the client for the Mixcoin++ protocol
A user opts in to the mix by sending its {\sl offer} to $M$. The offer includes the mix data for the mix that it wishes to participate in, followed by a privately selected nonce $n$, the public nonce $N$, and an ouptut address $k_{out}$, all of which are blinded by a commutative encryption function $C_A$ known only to $A$ (who also knows the inverse $C_A^{\prime}$). The offer has the following form: $\{D, [k_{out}, n, N]_{C_{A}}\}$.
'''

class client:

    def _init_():
        self.mix_data = dict()

    '''
    Run the client operations until a kill signal is received
    '''
    def run():
        #

        

def opt_in(mix_id):
    # TODO
    mix = mix_dict(mix_id)
    privateNonce = getClientNonce()
    outputAddress = getOutputAddress()
    
    offer = blind(mixData, privateNonce, outputAddress)
    send(offer, mixData.address)

def receive_partial_warranty(partialWarranty):
    self.partialWarranty

def transfer(inputAddress, mix_id):
    
